package com.anan.controller;

import com.anan.constants.Constants;
import com.anan.pojo.dto.*;
import com.anan.service.OpusService;
import com.anan.utils.ComResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.List;

/**
 * @author anan
 * @date 2023/05/09/20:26
 **/
@RestController
@Slf4j
@RequestMapping("/salvage/opus")
public class OpusController {
    @Resource
    private OpusService opusService;

    /**
     * 上传作品
     */
    @PostMapping("/addOpus")
    public ComResult addOpus(@RequestBody AddOpusDTO addOpusDTO) {
        ComResult comResult = new ComResult();
        comResult.setCode(Constants.RET_CODE.FAILED);

        if (null == addOpusDTO) {
            log.info("===== 参数为空！ =====");
            return null;
        }

        if (null == addOpusDTO.getStudentId() || null == addOpusDTO.getDescription()) {
            log.info("===== 参数不全！ =====");
            return null;
        }

        boolean flag = opusService.addOpus(addOpusDTO);
        if (flag) {
            comResult.setCode(Constants.RET_CODE.SUCCESS);
            comResult.setMessage("上传成功！");
        } else {
            comResult.setMessage("上传失败！");
        }
        return comResult;
    }

    /**
     * 点赞作品
     */
    @PostMapping("/addOneLike")
    public ComResult addLike(@RequestBody AddLikeDTO addLikeDTO) {
        ComResult comResult = new ComResult();
        comResult.setCode(Constants.RET_CODE.FAILED);

        if (null == addLikeDTO ) {
            log.info("===== 点赞作品opusId未传 =====");
            return null;
        }

        int likeNum = opusService.addOneLike(addLikeDTO.getOpusId());
        comResult.setCode(Constants.RET_CODE.SUCCESS);
        comResult.setMessage("点赞成功！");
        comResult.setData(likeNum);
        return comResult;
    }


    @PostMapping("/getAllOpus")
    public ComResult getAllOpus() {
        ComResult comResult = new ComResult();
        AllOpusInfoDTO allOpusInfos = opusService.getAllOpus();
        if (null != allOpusInfos) {
            comResult.setCode(Constants.RET_CODE.SUCCESS);
            comResult.setData(allOpusInfos);
            comResult.setMessage("查询成功");
        } else {
            comResult.setCode(Constants.RET_CODE.FAILED);
            comResult.setMessage("查询失败！");
        }
        return comResult;
    }


    /**
     * 查询未审核作品
     */
    @PostMapping("/get2AdminStatus")
    public ComResult get2AdminStatus(){
        ComResult comResult = new ComResult();
        AllOpusInfoDTO allOpusInfos = opusService.get2AdminStatus();
        if (null != allOpusInfos) {
            comResult.setCode(Constants.RET_CODE.SUCCESS);
            comResult.setData(allOpusInfos);
            comResult.setMessage("查询成功");
        } else {
            comResult.setCode(Constants.RET_CODE.FAILED);
            comResult.setMessage("查询失败！");
        }
        return comResult;
    }

    /**
     * 作品上下架
     */
    @PostMapping("/updateStatus")
    public ComResult updateStatus(@RequestBody UdStatusOpusDTO udStatusOpusDTO) {
        ComResult comResult = new ComResult();
        comResult.setCode(Constants.RET_CODE.FAILED);

        if(null == udStatusOpusDTO.getOpusId() || udStatusOpusDTO.getOpusId() < 0) {
            comResult.setMessage("商品id未传！");
            return comResult;
        }

        if(null == udStatusOpusDTO.getStatus() || udStatusOpusDTO.getStatus() < 0) {
            comResult.setMessage("商品状态未传！");
            return comResult;
        }

        boolean flag = opusService.updateShelvesStatus(udStatusOpusDTO);
        if(flag) {
            comResult.setCode(Constants.RET_CODE.SUCCESS);
            if(udStatusOpusDTO.getStatus() == 1) comResult.setMessage("上架成功！");
            if(udStatusOpusDTO.getStatus() == 2) comResult.setMessage("下架成功！");
        } else {
            comResult.setMessage("上架失败");
        }
        return comResult;
    }

}
